
#ifndef _BONUS_H
#define _BONUS_H

/**
 * @file Bonus.h
 * @brief Contient la structure Bonus et ses fonctions
 * @details liste des fonctions pour le module Bonus
 * @version 1.0
 * @date 2013/05/16
*/
#include "carte.h"
#include "lireFichier.h"

/**
 * @struct Bonus structure bonus
 * @brief Structure Bonus
 * @details	la structure contient: un tableau de Carte de type "triche" et un entier pour l'indice des cartes.
 * @param tab_cartriche le tableau qui contient les cartes "triche"
 * @param pos_cartriche la position des cartes dans le tableau
*/

typedef struct
{
    Carte * tab_cartriche; 
    int taille;
	int capacite;

}Bonus;

/**
 * @brief initBonus initialise pos_cartriche puis alloue un tableau de 4 cartes de type triche et les initialise.
 * @param [in-out] *pBon bonus a initialiser.
 * @return none
*/
void initBonus(Bonus *pBon);
/**
 * @brief creerBonus alloue un Bonus et fais appel a initBonus.
 * @param [in] void
 * @return Bonus * le Bonus creer.
*/
Bonus * creerBonus();
/**
 * @brief libereBonus libere le tableau de cartes on fesant appel a libereCarte et remet lepointeur a NULL.
 * @param [in-out] *pBon bonus a liberer.
 * @return none
*/
void libereBonus(Bonus *pBon);
/**
 * @brief detruitBonus fais appel a libereBonus et met le pointeur a NULL.
 * @param [in] **ppBon le Bonus a detruire.
 * @return none
*/
void detruitBonus(Bonus **ppBon);
/**
 * @brief set_triche mutateur pour modifier une carte du Bonus.
 * @param [in-out] *pBon le bonus concerné
 * @param [in] ptriche la nouvelle carte
 * @return none
*/
void set_triche(Bonus *pBon,const Carte *ptriche);
/**
 * @brief get_postriche accesseur pour acceder a l'indice de la carte au nom passé en parametre.
 * @param [in] *pBon bonus concerné.
 * @param [in] nom le nom de la carte.
 * @return i l'indice de la carte (0<i<4) si trouvé ,42 sinon.
*/
int get_postriche (const Bonus *pBon,const char *nom);
/**
 * @brief get_triche accesseur pour acceder a la carte dont on passe l'indice en parametre.
 * @param [in] *pBon bonus concerné.
 * @param [in] positionbonus l'indice de la carte recherché.
 * @return pBon->tab_cartriche[positiontriche] la carte du tableau a l'indice positionbonus.
*/
Carte * get_triche(const Bonus *,int positionbonus);
/**
 * @brief copieBonus fais une copie du Bonus passé en parametre.
 * @param [in] *bon1 le Bonus à copier.
 * @param [in] *bon2 la copie du Bonus.
 * @return void
*/
void copieBonus(Bonus *bon1, const Bonus *bon2);
/**
 * @brief supp_triche supprime la carte de type triche dont l'indice i est passé en parametre.
 * @param [in-out] *pBon le Bonus concerné.
 * @param [in] i l'indice de la carte a supprimer.
 * @return void
*/
void supp_triche(Bonus *pBon,const int i);
/**
 * @brief remplirTabBonus alloue la mémoire pour les bonus de jeu.
 * @param [in-out] *Bo les bonus de jeu.
 * @param [in] adr l'adresse où se trouve les bonus.
 * @return void
*/
void remplirTabBonus(Bonus *, const char *);
/**
 * @brief retourneBonusQuestions accesseur pour retourner le nombre de bonus utilisable en jocker pour une case exam.
 * @param [in] *pBon bonus du joueur concerné.
 * @return nbrB un entier.
*/
int retourneBonusQuestions(const Bonus *);
/**
 * @brief getNbrBonus accesseur pour acceder a la taille du Bonus.
 * @param [in] *bo
 * @return bo->taille la taille du bonus (nombre de carte triche dedans).
*/
int getNbrBonus(const Bonus *);
/**
 * @brief bonusTestRegression fais appel a toutes les fonctions du module Bonus et effectue des Tests.
 * @return void
*/
void bonusTestRegression();



#endif
